package com.ny.until;

import org.springframework.util.DigestUtils;

import java.security.SecureRandom;
import java.util.Base64;

/**
 * 密码工具类，实现MD5+盐值加密
 */
public class PasswordUntil {

    /**
     * 生成随机盐值
     * @return 生成的盐值字符串
     */
    public static String generateSalt() {
        SecureRandom random = new SecureRandom();
        byte[] salt = new byte[16];
        random.nextBytes(salt);
        return Base64.getEncoder().encodeToString(salt);
    }

    /**
     * 对密码进行MD5+盐值加密
     * @param password 原始密码
     * @param salt 盐值（可以为null）
     * @return 加密后的密码字符串
     */
    public static String encryptPassword(String password, String salt) {
        // 如果salt为null，使用空字符串作为默认值
        String safeSalt = (salt == null) ? "" : salt;
        // 将密码和盐值组合后进行MD5加密
        String combined = password + safeSalt;
        return DigestUtils.md5DigestAsHex(combined.getBytes());
    }

    /**
     * 验证密码
     * @param rawPassword 原始密码
     * @param encodedPassword 加密后的密码
     * @param salt 盐值（可以为null）
     * @return 密码是否匹配
     */
    public static boolean verifyPassword(String rawPassword, String encodedPassword, String salt) {
        try {
            String encryptedPassword = encryptPassword(rawPassword, salt);
            return encryptedPassword.equals(encodedPassword);
        } catch (Exception e) {
            // 如果验证过程中发生异常，返回false
            return false;
        }
    }
}
